/****************************************************************************
*					TripletXYYFeature
*
*	Description:	
*
****************************************************************************/

#ifndef _TripletXYYFeature_H
#define _TripletXYYFeature_H

#include <vector>
#include <string>
#include "Feature.h"

class TripletXYYFeature : public Feature {
 
  private:
	  
	  // Object ID 
	int id;

	  // Object name
	std::string name;

  protected:

  public:
	  // Standard constructor
	TripletXYYFeature(void);
      
	  // Standard destructor - empty one
    ~TripletXYYFeature();

      // Calculating feature value
    float calculate (const std::vector<unsigned int>& varIDs, const std::vector <unsigned int>& vars) const;
	float calculate (const std::vector <unsigned int>& vars) const;
	float calculate (const ExtendedPGMStruct& extPGMStruct, const unsigned int& varID) const;

	  // Removes all elements in internal variables
	void clear (void);

	  // Returns ID of this type of features
	int getObjectID (void) const;

	  // Returns string Name of this type of features
	int getObjectName (std::string &nameStr) const;

      // Sets values for which a feature should return 1
	int setDesiredValues (const std::vector <unsigned int>& desiredValues);

	  // Returns values for which a feature gives 1
	int getDesiredValues (std::vector <unsigned int>& desiredValues) const;
	
	  // Operator for checking whether two features are the same
	bool operator==(Feature& second) const;

}; // end of class Feature

#endif // _TripletXYYFeature_H
